package cn.com.fig.portal;

import cn.com.fig.portal.constants.Constants;

import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * <p>
 * Title: CookieUtil
 * </p>
 * <p>
 * Description: 初始化cookie信息
 * </p>
 */
public class CookieUtil {
    /**
     * 保存信息到cookie中
     * 
     * @param res
     *            响应对象
     * @param key
     *            属性名
     * @param value
     *            属性值
     * @param isFreeLogin
     *            判断是否为免登陆
     *
     * @param timeout
     *              cookie有效期，以分为单位
     */
    public static void setCookie(ServletResponse res, String key, String value, boolean isFreeLogin,String timeout) {
        Cookie ck = new Cookie(key, value);
        // 设置path，避免出现cookie同名
        ck.setPath("/");
        if (Constants.TOKEN_COOKIE_NAME.equals(key)) {
            if (isFreeLogin) {
                // 设置SWMHPortalToken cookie的有效期 配置以分钟为单位
                if (null != timeout && timeout.length() > 0) {
                    ck.setMaxAge(Integer.parseInt(timeout) * 60);
                } else {
                    // 默认有效期为10天(单位是秒)
                    ck.setMaxAge(Integer.parseInt(Constants.DEFAULT_TOKEN_TIME_OUT) * 24 * 60 * 60);
                }
            } else {
                // 设置有效期为负数，即表示关闭浏览器会删除该cookie
                ck.setMaxAge(-1);
            }
        } else if (Constants.SWMH_CURRENT_YHDM.equals(key)) {// 用来记住登录用户的账号
            if (isFreeLogin && timeout != null && timeout.length() > 0) {// 免登陆的状态
                // 免登陆的情况下为了避免免登陆有效期过期用户账号失效，向后延迟60分钟
                ck.setMaxAge(Integer.parseInt(timeout) * 60 + 60 * 60);
            } else {
                // 默认有效期(单位是秒) 11天
                ck.setMaxAge(11 * 24 * 60 * 60);
            }
        }
        ((HttpServletResponse) res).addCookie(ck);
    }

    /**
     * 从cookie中获取信息
     * 
     * @param request
     *            请求对象
     * @param key
     *            属性名
     * @return 属性值
     */
    public static String getTokenFromCookie(HttpServletRequest request, String key) {
        String cookie = request.getHeader("cookie");
        if (cookie != null){
            String cookieValue = null;
            String cookies[] = cookie.split(";");
            for(String cc : cookies){
                int indexof = cc.indexOf(key);
                if(indexof > -1){
                    cookieValue = cc.substring(indexof+key.length()+1);
                    return cookieValue;
                }
            }
        }
        Cookie[] cks = request.getCookies();
        if (cks == null || cks.length == 0) {
            return null;
        }
        for (int i = 0; i < cks.length; i++) {
            Cookie ck = cks[i];
            if (key.equals(ck.getName())) {
                return ck.getValue();
            }
        }
        return null;
    }
}
